package com.yby6.common.utils;

import com.google.gson.Gson;
import com.tencentcloudapi.captcha.v20190722.CaptchaClient;
import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultRequest;
import com.tencentcloudapi.captcha.v20190722.models.DescribeCaptchaResultResponse;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.yby6.common.utils.ip.IpUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * @program: yangbuyi-rbac
 * @ClassName: TencentCaptchaUtils
 * @create: 2021-06-03 11:30
 * @author: Yang Shuai
 * @since： JDK1.8
 * @TencentCaptchaUtils: 腾讯滑块验证码校验$
 **/

public class TencentCaptchaUtils {
	/**
	 * 腾讯滑块验证码校验
	 * @param randStr 前端回调函数返回的随机字符串
	 * @param token   前端回调函数返回的用户验证票据
	 * @param httpServletRequest
	 * @return
	 */
	public static boolean tencentCaptcha(String randStr, String token, HttpServletRequest httpServletRequest) {
		try {
			/*
			Action	是	String	公共参数，本接口取值：DescribeCaptchaResult。
			Version	是	String	公共参数，本接口取值：2019-07-22。
			Region	否	String	公共参数，本接口不需要传递此参数。
			CaptchaType	是	Integer	固定填值：9。可在控制台配置不同验证码类型。
			Ticket	是	String	前端回调函数返回的用户验证票据
			UserIp	是	String	透传业务侧获取到的验证码使用者的IP
			Randstr	是	String	前端回调函数返回的随机字符串
			CaptchaAppId	是	Integer	验证码应用ID
			AppSecretKey	是	String	用于服务器端校验验证码票据的验证密钥，请妥善保密，请勿泄露给第三方
			BusinessId	否	Integer	业务 ID，网站或应用在多个业务中使用此服务，通过此 ID 区分统计数据
			SceneId	否	Integer	场景 ID，网站或应用的业务下有多个场景使用此服务，通过此 ID 区分统计数据
			MacAddress	否	String	mac 地址或设备唯一标识
			Imei	否	String	手机设备号
			NeedGetCaptchaTime	否	Integer	是否返回前端获取验证码时间，取值1：需要返回
			* */
			Credential cred = new Credential("AKID8AtMYiNc6JQgaDAcLm60qpT3AKHytvGK", "4tkIUn00aI0UvkCzY12lVzD95tQjprc8");

			HttpProfile httpProfile = new HttpProfile();
			httpProfile.setEndpoint("captcha.tencentcloudapi.com");

			ClientProfile clientProfile = new ClientProfile();
			clientProfile.setHttpProfile(httpProfile);

			CaptchaClient client = new CaptchaClient(cred, "", clientProfile);
			DescribeCaptchaResultRequest req = new DescribeCaptchaResultRequest();
			// 	固定填值：9。可在控制台配置不同验证码类型
			req.setCaptchaType(9L);
			// 	前端回调函数返回的用户验证票据
			req.setTicket(token);
			// 透传业务侧获取到的验证码使用者的IP
			String ipAddr = IpUtils.getIpAddr(httpServletRequest);
			req.setUserIp(ipAddr);
			// 前端回调函数返回的随机字符串
			req.setRandstr(randStr);
			// 验证码应用ID
			req.setCaptchaAppId(2060673535L);
			// 用于服务器端校验验证码票据的验证密钥，请妥善保密，请勿泄露给第三方
			req.setAppSecretKey("0Q_HrLda3Uu2cVn5GHKRQ2w**");
			// 是否返回前端获取验证码时间，取值1：需要返回
			req.setNeedGetCaptchaTime(1L);
			// 场景 ID，网站或应用的业务下有多个场景使用此服务，通过此 ID 区分统计数据
			req.setSceneId(1L);
			DescribeCaptchaResultResponse resp = client.DescribeCaptchaResult(req);
			Gson gson = new Gson().newBuilder().create();
			Map map = gson.fromJson(DescribeCaptchaResultResponse.toJsonString(resp), Map.class);
			System.out.println(map);
			if ("ok".equalsIgnoreCase(map.get("CaptchaMsg").toString())){
				return true;
			} else {
				return false;
			}

		} catch (TencentCloudSDKException e) {
			System.out.println(e.toString());
			return false;
		}
	}

	public static void main(String[] args) {
		boolean b = tencentCaptcha("@sTi", "t03y0_-dF-mZy_xXAZRbVExbU8oefpFa5Ybzc9pt1v9OZ09_PyP096XXc9rWpq0y0QfdBiRV75sd8d_B91hztoZXKR_A3Hva4U2od6vq5ksLD8*", null);
		System.out.println(b);
	}

}
